package com.yunhe.merchants.service;

import com.github.pagehelper.PageInfo;
import com.yunhe.common.exception.ArgumentErrorException;
import com.yunhe.common.model.mybatis.PageResult;
import com.yunhe.merchants.domain.MyProject;
import com.yunhe.merchants.domain.ProcessStatus;
import com.yunhe.merchants.model.FilterCondition;
import com.yunhe.merchants.model.IntentionProjectUpload;

import java.util.List;

/**
 * @Author: DongWenYu
 * @Date: 2021/5/7 21:05
 */
public interface IMyProjectService {


    /**
     * 根据筛选条件分页查询意向项目
     * @param filterCondition
     * @param userId
     * @param page
     * @param size
     * @return com.yunhe.common.model.mybatis.PageResult
     * @create 2021/5/11 16:01
     */
    PageResult selectByFilterCondition(FilterCondition filterCondition,List<String> status , Long userId ,int page, int size);


    /**
     * 根据项目id，和流程状态的code查询该状态
     * @param id
     * @param status 传nul查询最新状态
     * @return com.yunhe.merchants.domain.ProcessStatus
     * @create 2021/5/11 17:36
     */
    ProcessStatus selectStatusById(Long id , String status);

    /**
     * 查询所有处于保护期但未提醒的项目
     * @return java.util.List<com.yunhe.merchants.domain.IntentionProject> 
     * @create 2021/5/11 17:37
     */
    List<MyProject> selectProtectedRemind();

    /**
     * 根据项目id查询与该项目推荐厂房重复的项目集合
     * @param id 
     * @return java.util.List<com.yunhe.merchants.domain.IntentionProject> 
     * @create 2021/5/11 17:38
     */
    List<MyProject> selectOtherOfficeByProjectId(Long id);

    /**
     * 查询所有保护期已经过期的
     * @return java.util.List<com.yunhe.merchants.domain.IntentionProject> 
     * @create 2021/5/12 9:25
     */
    List<MyProject> selectProtectedExpire();

    /**
     * 查询2周没有更新的项目集合
     * @return java.util.List<com.yunhe.merchants.domain.IntentionProject> 
     * @create 2021/5/12 13:35
     */
    List<MyProject> selectNoUpdate();

    /**
     * 新增项目
     * @param myProject 
     * @param userId 
     * @param stationId
     * @return void 
     * @create 2021/5/13 10:30
     */
    void insert(MyProject myProject, Long userId, Long stationId);

    /**
     * 根据id查询项目
     * @param id 
     * @return com.yunhe.merchants.domain.MyProject 
     * @create 2021/5/13 11:00
     */
    MyProject selectById(Long id);

    /**
     * 根据id更新项目
     * @param myProject 
     * @return void 
     * @create 2021/5/13 11:16
     */
    void update(MyProject myProject);

    /**
     * 根据id更新项目，写入更新人，更新时间。流程更新的时候需要记入
     * @param myProject
     * @return void
     * @create 2021/5/13 11:16
     */
    void update(MyProject myProject , Long userId);

    /**
     * 批量导出意向项目
     * @param ids
     * @return java.util.List<com.yunhe.merchants.model.IntentionProjectUpload>
     * @create 2021/5/11 16:02
     */
    List<MyProject> export(String ids , FilterCondition filterCondition , List<String> status);

    /**
     * 项目中心-流程管理-查询列表
     * @param filterCondition
     * @return PageInfo<MyProject>
     */
    PageResult selectForLatestStatusList(FilterCondition filterCondition, int pageNum, int pageSize) throws ArgumentErrorException;

    void insertBatch(List<MyProject> myProjects);

    void delete(Long id);

}
